#!/usr/bin/env python3
"""
数据库初始化脚本 - 最终修复版
使用自定义密码哈希方案
"""

import sys
import os

# 添加项目根目录到 Python 路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from app.database import SessionLocal, engine
from app import models
from app.security import get_password_hash  # 使用新的安全模块

def init_db():
    """初始化数据库"""
    # 创建所有表
    models.Base.metadata.create_all(bind=engine)
    
    db = SessionLocal()
    try:
        # 创建管理员账号
        admin_user = db.query(models.User).filter(models.User.username == "admin").first()
        if not admin_user:
            admin_user = models.User(
                username="admin",
                email="admin@example.com",
                hashed_password=get_password_hash("admin123"),
                is_superuser=True,
                is_active=True
            )
            db.add(admin_user)
            db.commit()
            db.refresh(admin_user)
            print("✓ 管理员账号已创建: admin / admin123")
        else:
            print("✓ 管理员账号已存在")
        
        # 创建测试账号
        test_user = db.query(models.User).filter(models.User.username == "test").first()
        if not test_user:
            test_user = models.User(
                username="test",
                email="test@example.com",
                hashed_password=get_password_hash("test123"),
                is_superuser=False,
                is_active=True
            )
            db.add(test_user)
            db.commit()
            db.refresh(test_user)
            print("✓ 测试账号已创建: test / test123")
        else:
            print("✓ 测试账号已存在")
        
        # 创建示例脚本
        scripts = db.query(models.Script).all()
        if not scripts:
            # 获取管理员用户 ID
            admin = db.query(models.User).filter(models.User.username == "admin").first()
            if admin:
                # 在创建示例脚本的部分添加 Shell 脚本
                shell_script = models.Script(
    name="示例 Shell 脚本",
    description="这是一个示例 Shell 脚本，演示系统信息获取和文件操作",
    content="""#!/bin/bash

# 示例 Shell 脚本
# 脚本管理平台演示

set -e  # 遇到错误立即退出

echo "=== Shell 脚本开始执行 ==="
echo "当前时间: $(date)"
echo "当前用户: $(whoami)"
echo "工作目录: $(pwd)"

# 显示系统信息
echo "=== 系统信息 ==="
echo "主机名: $(hostname)"
echo "系统版本: $(uname -a)"

# 模拟一些工作
echo "=== 执行任务 ==="
for i in {1..5}; do
    echo "执行步骤 $i/5..."
    sleep 1
done

echo "=== Shell 脚本执行完成 ==="
echo "执行状态: 成功"
""",
                 language="shell",
                 is_active=True,
                 owner_id=admin_user.id
                )
                db.add(shell_script)
                example_script = models.Script(
                    name="示例脚本",
                    description="这是一个示例 Python 脚本",
                    content="""#!/usr/bin/env python3
import time
import random

def main():
    print("脚本开始执行...")
    
    # 模拟一些工作
    for i in range(5):
        print(f"执行步骤 {i+1}/5")
        time.sleep(0.5)
    
    # 模拟随机成功/失败
    if random.random() > 0.3:
        print("脚本执行成功!")
        return 0
    else:
        print("脚本执行失败!")
        return 1

if __name__ == "__main__":
    exit(main())
""",
                    language="python",
                    is_active=True,
                    owner_id=admin.id
                )
                db.add(example_script)
                db.commit()
                print("✓ 示例脚本已创建")
        
        print("数据库初始化完成!")
        
    except Exception as e:
        print(f"数据库初始化失败: {e}")
        import traceback
        traceback.print_exc()
        db.rollback()
    finally:
        db.close()

if __name__ == "__main__":
    init_db()
